import java.util.Arrays;

public class Group {
    //给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target 的那 两个 整数，
    // 并返回它们的数组下标。
    //你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。
    public static int[] find1(int[] nums, int target) {
        int[] arr = new int[2];
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] + nums[i + 1] == target) {
                arr[0] = i;
                arr[1] = i + 1;
                break;
            }
        }
        return arr;
    }

    public static void main(String[] args) {
        int arr[] = {2, 3, 4, 1, 5, 8, 9, 10, 15};
        int arr1[] = new int[2];
        arr1 = find1(arr, 5);
        System.out.println(Arrays.toString(arr1));

    }

    //给定一个有序整型数组, 实现二分查找
    public static int binary(int[] arr, int key) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) >>> 1;
            if (arr[mid] < key) {
                left = mid + 1;
            } else if (arr[mid] > key) {
                right = mid - 1;
            } else {
                return mid;
            }
        }
        return -1;
    }

    public static void main4(String[] args) {
        int arr[] = {1, 2, 4, 7, 9, 11, 34};
        int index = binary(arr, 11);
        System.out.println(index);

    }
    //调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
    //
    //如数组：[1,2,3,4,5,6]
    //
    //调整后可能是：[1, 5, 3, 4, 2, 6]
    public static void swap(int[] arr) {
        int head = 0;
        int tail = arr.length - 1;
        while (head <= tail) {
            if (arr[head] % 2 != 0) {
                head++;
            } else {
                if (arr[tail] % 2 == 0) {
                    tail--;
                } else {
                    int a = arr[head];
                    arr[head] = arr[tail];
                    arr[tail] = a;
                    head++;
                    tail--;
                }
            }
        }
    }

    public static void main3(String[] args) {
        int arr[] = {1, 2, 3, 4};
        swap(arr);
        System.out.println(Arrays.toString(arr));
    }
    //实现一个方法 avg, 以数组为参数, 求数组中所有元素的平均值(注意方法的返回值类型)
    public static double avg(int[] arr) {
        int sum = 0;
        for (int i : arr) {
            sum = sum + i;
        }
        return sum * 1.0 / arr.length;
    }

    public static void main2(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        double ret = avg(arr);
        System.out.println(ret);
    }
    //实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上.
    // 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}
    public static void transform(int[] arry) {
        for (int i = 0; i < arry.length; i++) {
            arry[i] = arry[i] * 2;
        }
    }

    public static void main1(String[] args) {
        int arry[] = {1, 2, 3};
        transform(arry);
        System.out.println(Arrays.toString(arry));
    }
}
